package cn.tedu.spotms.server.mapper;

import cn.tedu.spotms.server.pojo.dto.AdminUpdateInfoDTO;
import cn.tedu.spotms.server.pojo.entity.Admin;
import cn.tedu.spotms.server.pojo.vo.AdminDetailVO;
import cn.tedu.spotms.server.pojo.vo.AdminListItemVO;
import cn.tedu.spotms.server.pojo.vo.AdminLoginVO;
import cn.tedu.spotms.server.pojo.vo.AdminSimpleVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.time.LocalDateTime;
import java.util.List;

@Repository
public interface AdminMapper {

    /**
     * 添加管理员
     * @param admin 管理员
     * @return 受影响的行数
     */
    int insert(Admin admin);

    /**
     * 给管理员设置角色
     * @param adminId 管理员id
     * @param roles 角色的集合
     * @param time 设置时间
     * @return 受影响的行数
     */
    int insertRolesById(@Param("adminId") Long adminId, @Param("roles") List<Long> roles, @Param("time") LocalDateTime time);

    /**
     * 根据id删除管理员
     * @param id 管理员id
     * @return 受影响的行数
     */
    int deleteById(Long id);

    /**
     * 根据管理员id删除匹配的角色
     * @param adminId 管理员id
     * @return 受影响的行数
     */
    int deleteRolesById(Long adminId);

    /**
     * 根据id禁用或启用管理员
     * @param id 管理员id
     * @param isEnable 1=启用，0=禁用
     * @return 受影响的行数
     */
    int updateIsEnableById(@Param("id") Long id,@Param("isEnable") Integer isEnable);

    /**
     * 根据id修改最后修改时间
     * @param id 管理员id
     * @return 受影响的行数
     */
    int updateGmtModifiedById(@Param("id") Long id, @Param("gmtModified") LocalDateTime gmtModified);

    /**
     * 根据id更新管理员基本信息
     * @param admin 管理员基本信息
     * @return 受影响的行数
     */
    int updateInfo(AdminUpdateInfoDTO admin);

    /**
     * 根据id查询管理员的简单信息
     * @param id 管理员id
     * @return 管理员的简单信息
     */
    AdminSimpleVO getById(Long id);

    /**
     * 通过用户名查询管理员的简单信息
     * @param username 用户名
     * @return 管理员的简单信息
     */
    AdminSimpleVO getByUsername(String username);

    /**
     * 通过电话号码查询管理员的简单信息
     * @param phone 电话号码
     * @return 管理员的简单信息
     */
    AdminSimpleVO getByPhone(String phone);

    /**
     * 根据id查询管理员详细信息
     * @param id 管理员id
     * @return 管理员详细信息
     */
    AdminDetailVO getDetailsById(Long id);

    /**
     * 查询管理员列表
     * @return 管理员列表
     */
    List<AdminListItemVO> list();

    /**
     * 根据管理员id查询匹配的角色id集合
     * @param id 管理员id
     * @return 角色id集合
     */
    List<Long> getRolesIdById(Long id);

    /**
     * 根据用户名获取管理员登录信息
     * @param username 用户名
     * @return 管理员登录信息
     */
    AdminLoginVO getLoginInfoByUsername(String username);
}
